/**
 * 文件名称: display.h
 * 摘    要: 画图软件显示部分代码
 * 来    源: huenrong
 *
 * 当前版本: 1.0 
 * 作    者: huenrong
 * 完成日期: 2019-07-28
 **/


#ifndef __DISPLAY_H
#define __DISPLAY_H

#ifdef __cplusplus
extern "C" {
#endif

// 屏幕有效绘制区域定义
#define     SCREEN_DRAW_X_START     55          // 屏幕有效绘制区域x轴起始点
#define     SCREEN_DRAW_X_END       969         // 屏幕有效绘制区域x轴结束点
#define     SCREEN_DRAW_Y_START     0           // 屏幕有效绘制区域x轴起始点
#define     SCREEN_DRAW_Y_END       600         // 屏幕有效绘制区域y轴结束点

// 各功能操作图片位置定义
#define     RED_PEN_AREA_X_START    0           // 红色笔显示位置x轴起始位置
#define     RED_PEN_AREA_X_END      50          // 红色笔显示位置x轴结束位置
#define     RED_PEN_AREA_Y_START    185         // 红色笔显示位置y轴起始位置
#define     RED_PEN_AREA_Y_END      235         // 红色笔显示位置y轴结束位置

#define     GREEN_PEN_AREA_X_START  0           // 绿色笔显示位置x轴起始位置
#define     GREEN_PEN_AREA_X_END    50          // 绿色笔显示位置x轴结束位置
#define     GREEN_PEN_AREA_Y_START  245         // 绿色笔显示位置y轴起始位置
#define     GREEN_PEN_AREA_Y_END    295         // 绿色笔显示位置y轴结束位置

#define     BLUE_PEN_AREA_X_START   0           // 蓝色笔显示位置x轴起始位置
#define     BLUE_PEN_AREA_X_END     50          // 蓝色笔显示位置x轴结束位置
#define     BLUE_PEN_AREA_Y_START   305         // 蓝色笔显示位置y轴起始位置
#define     BLUE_PEN_AREA_Y_END     355         // 蓝色笔显示位置y轴结束位置

#define     BLACK_PEN_AREA_X_START  0           // 黑色笔显示位置x轴起始位置
#define     BLACK_PEN_AREA_X_END    50          // 黑色笔显示位置x轴结束位置
#define     BLACK_PEN_AREA_Y_START  365         // 黑色笔显示位置y轴起始位置
#define     BLACK_PEN_AREA_Y_END    415         // 黑色笔显示位置y轴结束位置

#define     THIN_LINE_AREA_X_START  974         // 细线显示位置x轴起始位置
#define     THIN_LINE_AREA_X_END    1024        // 细线显示位置x轴结束位置
#define     THIN_LINE_AREA_Y_START  185         // 细线显示位置y轴起始位置
#define     THIN_LINE_AREA_Y_END    235         // 细线显示位置y轴结束位置

#define     THICK_LINE_AREA_X_START 974         // 粗线显示位置x轴起始位置
#define     THICK_LINE_AREA_X_END   1024        // 粗线显示位置x轴结束位置
#define     THICK_LINE_AREA_Y_START 245         // 粗线显示位置y轴起始位置
#define     THICK_LINE_AREA_Y_END   295         // 粗线显示位置y轴结束位置

#define     ERASER_AREA_X_START     974         // 橡皮擦显示位置x轴起始位置
#define     ERASER_AREA_X_END       1024        // 橡皮擦显示位置x轴结束位置
#define     ERASER_AREA_Y_START     305         // 橡皮擦显示位置y轴起始位置
#define     ERASER_AREA_Y_END       355         // 橡皮擦显示位置y轴结束位置

#define     RESET_AREA_X_START      974         // 复位显示位置x轴起始位置
#define     RESET_AREA_X_END        1024        // 复位显示位置x轴结束位置
#define     RESET_AREA_Y_START      365         // 复位显示位置y轴起始位置
#define     RESET_AREA_Y_END        415         // 复位显示位置y轴结束位置

// 各功能图片在文件系统中的位置定义
#define     RED_PEN_PATH            "./source_picture/red.png"      // 红色笔路径
#define     GREEN_PEN_PATH          "./source_picture/green.png"    // 绿色笔路径
#define     BLUE_PEN_PATH           "./source_picture/blue.png"     // 蓝色笔路径
#define     BLACK_PEN_PATH          "./source_picture/black.png"    // 黑色笔路径
#define     THIN_LINE_PATH          "./source_picture/thin_line.png"    // 细线路径
#define     THICK_LINE_PATH         "./source_picture/thick_line.png"   // 粗线路径
#define     ERASER_PATH             "./source_picture/eraser.png"       // 橡皮擦路径
#define     RESET_PATH              "./source_picture/reset.png"        // 复位路径

// 定义画笔粗细
enum brush
{
    THIN_LINE = 1,
    THICK_LINE,
};

struct display_info
{
    unsigned int draw_color;         // 当前绘制颜色
    unsigned char brush_thickness;    // 当前画笔粗细(参数值详见enum brush)
    unsigned char eraser_flag;        // 擦除标志(0: 不使用橡皮擦; 1: 使用橡皮擦)
};


/******************************************************************************
函数名称: framebuffer_display_operating_area
函数功能: framebuffer显示操作区域
函数参数: 无
函数返回: 无
******************************************************************************/
void framebuffer_display_operating_area(void);

/******************************************************************************
函数名称: update_selected_color
函数功能: 更新当前选中颜色, 更新对应图标(如果选中某一个颜色, 
          则将该颜色对应的图标画方框, 同时需要将其他颜色显示成原始图片)
函数参数: 无
函数返回: 无
******************************************************************************/
void update_selected_color(void);

/******************************************************************************
函数名称: update_selected_line
函数功能: 更新当前选中画笔粗细, 更新对应图标(如果选中某一种粗细的画笔, 
          则将对应粗细的画笔图标用黑色方框框选, 同时将其它粗细的画笔显示成原始图片)
函数参数: 无
函数返回: 无
******************************************************************************/
void update_selected_line(void);

/******************************************************************************
函数名称: update_eraser_area
函数功能: 更新擦除区域图标
函数参数: 无
函数返回: 无
******************************************************************************/
void update_eraser_area(void);

/******************************************************************************
函数名称: creat_display_thread
函数功能: 创建显示处理线程
函数参数: 无
函数返回: 成功: 返回0
          失败: 返回-1
******************************************************************************/
int creat_display_thread(void);


#ifdef __cplusplus
}
#endif

#endif /* __DISPLAY_H */